package ubo.master1.jeupoker.ia;

import ubo.master1.jeupoker.gui.LaCart;
import java.util.List;
import java.util.Set;

/**
 * Affiche la table et les information du compte du joueur.
 * 
 * doit être implémenté par n'importe quel joueur utilisateur ou robot.
 * 
 */
public interface GenreJoueur {
    
    /**
     * Reçoit les messages du jeu .
     * 
     * @param message
     *            Le message.
     */
    void messageReceived(String message);

    /**
     * Gérer l'événement de joindre une table.
     * 
     * @param bigBlind
     *            La grande mise big blind.
     * @param players
     *            Les joueurs sur la table
     */
    void joinedTable(int bigBlind, List<Joueur> players);
    
    /**
     * gére l'événement du lancement d'une nouvelle main.
     * 
     * @param dealer
     *            Le donneur.
     */
    void handStarted(Joueur dealer);
    
    /**
     * Gérer la rotation du jeu.
     * 
     * @param actor
     *            le nouveau acteur.
     */
    void actorRotated(Joueur actor);
    
    /**
     * gérer l'événement cycle du jeu.
     * 
     * @param player
     *            Ler joueur.
     */
    void playerUpdated(Joueur player);
    
    /**
     * gérer la mise a jouer des joueurs.
     * 
     * @param cards
     *            Les carte.
     * @param bet
     *            La mise courante.
     * @param pot
     *            Le pot courant.
     */
    void boardUpdated(List<LaCart> cards, int bet, int pot);
    
    /**
     * gérer l'événement de mise a jour d'une table
     * 
     * @param player
     *            Le joueur a effectué une action.
     */
    void playerActed(Joueur player);

    /**
     * Demande au joueur de séléctioner  une action.
     * 
     * @param allowedActions
     *            Les actions autorisés.
     * 
     * @return l'action séléctionné.
     */
    LesActions act(Set<LesActions> allowedActions);

}
